home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 24 / CU Amiga Magazine's Super CD-ROM 24 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-07].iso / CUCD / Utilities / vim-5.1 / src / ex_cmds.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-03-22  |  17.8 KB  |  351 lines

  1. /* vi:set ts=8 sts=4 sw=4:
  2.  *
  3.  * VIM - Vi IMproved    by Bram Moolenaar
  4.  *
  5.  * Do ":help uganda"  in Vim to read copying and usage conditions.
  6.  * Do ":help credits" in Vim to see a list of people who contributed.
  7.  */
  8.  
  9. /*
  10.  * This file defines the Ex commands.
  11.  * When DO_DECLARE_EXCMD is defined, the table with ex command names and
  12.  * options results.
  13.  * When DO_DECLARE_EXCMD is NOT defined, the enum with all the Ex commands
  14.  * results.
  15.  * This clever trick was invented by Ron Aaron.
  16.  */
  17.  
  18. /*
  19.  * When adding an Ex command:
  20.  * 1. Add an entry in the table below.
  21.  * 2. Add a "case: CMD_xxx" in ex_docmd.c.
  22.  * 3. Add a line in ../doc/index.txt.
  23.  * 4. Add documentation in ../doc/xxx.txt.  Add a tag for both the short and
  24.  *    long name of the command.
  25.  */
  26.  
  27. #undef EXCMD        /* just in case */
  28. #ifdef DO_DECLARE_EXCMD
  29. # define EXCMD(a, b, c)  {(char_u *)b, c}
  30. #else
  31. # define EXCMD(a, b, c)  a
  32. #endif
  33.  
  34. #define RANGE       0x01        /* allow a linespecs */
  35. #define BANG       0x02        /* allow a ! after the command name */
  36. #define EXTRA       0x04        /* allow extra args after command name */
  37. #define XFILE       0x08        /* expand wildcards in extra part */
  38. #define NOSPC       0x10        /* no spaces allowed in the extra part */
  39. #define    DFLALL       0x20        /* default file range is 1,$ */
  40. #define NODFL       0x40        /* do not default to the current file name */
  41. #define NEEDARG       0x80        /* argument required */
  42. #define TRLBAR      0x100        /* check for trailing vertical bar */
  43. #define REGSTR      0x200        /* allow "x for register designation */
  44. #define COUNT      0x400        /* allow count in argument, after command */
  45. #define NOTRLCOM  0x800        /* no trailing comment allowed */
  46. #define ZEROR     0x1000        /* zero line number allowed */
  47. #define USECTRLV 0x2000        /* do not remove CTRL-V from argument */
  48. #define NOTADR     0x4000        /* number before command is not an address */
  49. #define EDITCMD     0x8000        /* has "+command" argument */
  50. #define BUFNAME 0x10000        /* accepts buffer name */
  51. #define FILES    (XFILE + EXTRA)    /* multiple extra files allowed */
  52. #define WORD1    (EXTRA + NOSPC)    /* one extra word allowed */
  53. #define FILE1    (FILES + NOSPC)    /* 1 file allowed, defaults to current file */
  54. #define NAMEDF    (FILE1 + NODFL)    /* 1 file allowed, defaults to "" */
  55. #define NAMEDFS    (FILES + NODFL)    /* multiple files allowed, default is "" */
  56.  
  57. /*
  58.  * This array maps ex command names to command codes. The order in which
  59.  * command names are listed below is significant -- ambiguous abbreviations
  60.  * are always resolved to be the first possible match (e.g. "r" is taken
  61.  * to mean "read", not "rewind", because "read" comes before "rewind").
  62.  * Not supported commands are included to avoid ambiguities.
  63.  */
  64. #ifdef DO_DECLARE_EXCMD
  65. static struct cmdname
  66. {
  67.     char_u  *cmd_name;    /* name of the command */
  68.     long_u   cmd_argt;    /* command line arguments permitted/needed/used */
  69. } cmdnames[] =
  70. #else
  71. enum CMD_index
  72. #endif
  73. {
  74.     EXCMD(CMD_append,    "append",    BANG+RANGE+TRLBAR),
  75.     EXCMD(CMD_all,    "all",        RANGE+NOTADR+COUNT+TRLBAR),
  76.     EXCMD(CMD_abbreviate,"abbreviate",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  77.     EXCMD(CMD_abclear,    "abclear",    TRLBAR),
  78.     EXCMD(CMD_amenu,    "amenu",    RANGE+NOTADR+ZEROR+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  79.     EXCMD(CMD_anoremenu,"anoremenu",    RANGE+NOTADR+ZEROR+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  80.     EXCMD(CMD_args,    "args",        BANG+NAMEDFS+EDITCMD+TRLBAR),
  81.     EXCMD(CMD_argument, "argument",    BANG+RANGE+NOTADR+COUNT+EXTRA+EDITCMD+TRLBAR),
  82.     EXCMD(CMD_ascii,    "ascii",    TRLBAR),
  83.     EXCMD(CMD_autocmd,    "autocmd",    BANG+EXTRA+NOTRLCOM+USECTRLV),
  84.     EXCMD(CMD_augroup,    "augroup",    WORD1+TRLBAR),
  85.     EXCMD(CMD_aunmenu,    "aunmenu",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  86.     EXCMD(CMD_buffer,    "buffer",    BANG+RANGE+NOTADR+BUFNAME+COUNT+EXTRA+TRLBAR),
  87.     EXCMD(CMD_ball,    "ball",        RANGE+NOTADR+COUNT+TRLBAR),
  88.     EXCMD(CMD_buffers,    "buffers",    TRLBAR),
  89.     EXCMD(CMD_bdelete,    "bdelete",    BANG+RANGE+BUFNAME+NOTADR+COUNT+EXTRA+TRLBAR),
  90.     EXCMD(CMD_bunload,    "bunload",    BANG+RANGE+BUFNAME+NOTADR+COUNT+EXTRA+TRLBAR),
  91.     EXCMD(CMD_blast,    "blast",    BANG+RANGE+TRLBAR),
  92.     EXCMD(CMD_bmodified,"bmodified",    BANG+RANGE+NOTADR+COUNT+TRLBAR),
  93.     EXCMD(CMD_bnext,    "bnext",    BANG+RANGE+NOTADR+COUNT+TRLBAR),
  94.     EXCMD(CMD_bNext,    "bNext",    BANG+RANGE+NOTADR+COUNT+TRLBAR),
  95.     EXCMD(CMD_bprevious,"bprevious",    BANG+RANGE+NOTADR+COUNT+TRLBAR),
  96.     EXCMD(CMD_brewind,    "brewind",    BANG+RANGE+TRLBAR),
  97.     EXCMD(CMD_break,    "break",    TRLBAR),
  98.     EXCMD(CMD_change,    "change",    BANG+RANGE+COUNT+TRLBAR),
  99.     EXCMD(CMD_cabbrev,    "cabbrev",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  100.     EXCMD(CMD_cabclear, "cabclear",    TRLBAR),
  101.     EXCMD(CMD_cc,    "cc",        RANGE+NOTADR+COUNT+TRLBAR+BANG),
  102.     EXCMD(CMD_cd,    "cd",        NAMEDF+TRLBAR),
  103.     EXCMD(CMD_center,    "center",    TRLBAR+RANGE+EXTRA),
  104.     EXCMD(CMD_cfile,    "cfile",    TRLBAR+FILE1+BANG),
  105.     EXCMD(CMD_chdir,    "chdir",    NAMEDF+TRLBAR),
  106.     EXCMD(CMD_checkpath,"checkpath",    TRLBAR+BANG),
  107.     EXCMD(CMD_clist,    "clist",    TRLBAR+BANG),
  108.     EXCMD(CMD_close,    "close",    BANG+TRLBAR),
  109.     EXCMD(CMD_clast,    "clast",    RANGE+NOTADR+COUNT+TRLBAR+BANG),
  110.     EXCMD(CMD_cmap,    "cmap",        EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  111.     EXCMD(CMD_cmapclear,"cmapclear",    TRLBAR),
  112.     EXCMD(CMD_cmenu,    "cmenu",    RANGE+NOTADR+ZEROR+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  113.     EXCMD(CMD_cnext,    "cnext",    RANGE+NOTADR+COUNT+TRLBAR+BANG),
  114.     EXCMD(CMD_cNext,    "cNext",    RANGE+NOTADR+COUNT+TRLBAR+BANG),
  115.     EXCMD(CMD_cnoremap, "cnoremap",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  116.     EXCMD(CMD_cnoremenu,"cnoremenu",    RANGE+NOTADR+ZEROR+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  117.     EXCMD(CMD_cnoreabbrev,"cnoreabbrev",EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  118.     EXCMD(CMD_copy,    "copy",        RANGE+EXTRA+TRLBAR),
  119.     EXCMD(CMD_continue, "continue",    TRLBAR),
  120.     EXCMD(CMD_coffee,    "coffee",    RANGE+EXTRA+TRLBAR),
  121.     EXCMD(CMD_cprevious,"cprevious",    RANGE+NOTADR+COUNT+TRLBAR+BANG),
  122.     EXCMD(CMD_cquit,    "cquit",    TRLBAR+BANG),
  123.     EXCMD(CMD_crewind,    "crewind",    RANGE+NOTADR+COUNT+TRLBAR+BANG),
  124.     EXCMD(CMD_cunmap,    "cunmap",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  125.     EXCMD(CMD_cunmenu,    "cunmenu",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  126.     EXCMD(CMD_cunabbrev,"cunabbrev",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  127.     EXCMD(CMD_delete,    "delete",    RANGE+REGSTR+COUNT+TRLBAR),
  128.     EXCMD(CMD_display,    "display",    EXTRA+NOTRLCOM+TRLBAR),
  129.     EXCMD(CMD_digraphs, "digraphs",    EXTRA+TRLBAR),
  130.     EXCMD(CMD_djump,    "djump",    BANG+RANGE+DFLALL+EXTRA),
  131.     EXCMD(CMD_dlist,    "dlist",    BANG+RANGE+DFLALL+EXTRA),
  132.     EXCMD(CMD_doautocmd,"doautocmd",    EXTRA+TRLBAR),
  133.     EXCMD(CMD_doautoall,"doautoall",    EXTRA+TRLBAR),
  134.     EXCMD(CMD_dsearch,    "dsearch",    BANG+RANGE+DFLALL+EXTRA),
  135.     EXCMD(CMD_dsplit,    "dsplit",    BANG+RANGE+DFLALL+EXTRA),
  136.     EXCMD(CMD_edit,    "edit",        BANG+FILE1+EDITCMD+TRLBAR),
  137.     EXCMD(CMD_echo,    "echo",        EXTRA+NOTRLCOM),
  138.     EXCMD(CMD_echohl,    "echohl",    EXTRA+TRLBAR),
  139.     EXCMD(CMD_echon,    "echon",    EXTRA+NOTRLCOM),
  140.     EXCMD(CMD_else,    "else",        TRLBAR),
  141.     EXCMD(CMD_elseif,    "elseif",    EXTRA+NOTRLCOM),
  142.     EXCMD(CMD_endif,    "endif",    TRLBAR),
  143.     EXCMD(CMD_endwhile,    "endwhile",    TRLBAR),
  144.     EXCMD(CMD_ex,    "ex",        BANG+FILE1+EDITCMD+TRLBAR),
  145.     EXCMD(CMD_execute,    "execute",    EXTRA+NOTRLCOM),
  146.     EXCMD(CMD_exit,    "exit",        RANGE+BANG+FILE1+DFLALL+TRLBAR),
  147.     EXCMD(CMD_file,    "file",        BANG+FILE1+TRLBAR),
  148.     EXCMD(CMD_files,    "files",    TRLBAR),
  149.     EXCMD(CMD_fixdel,    "fixdel",    TRLBAR),
  150.     EXCMD(CMD_global,    "global",    RANGE+BANG+EXTRA+DFLALL),
  151.     EXCMD(CMD_gui,    "gui",        BANG+NAMEDFS+EDITCMD+TRLBAR),
  152.     EXCMD(CMD_gvim,    "gvim",        BANG+NAMEDFS+EDITCMD+TRLBAR),
  153.     EXCMD(CMD_help,    "help",        EXTRA+NOTRLCOM),
  154.     EXCMD(CMD_highlight,"highlight",    BANG+EXTRA+TRLBAR),
  155.     EXCMD(CMD_hide,    "hide",        BANG+TRLBAR),
  156.     EXCMD(CMD_insert,    "insert",    BANG+RANGE+TRLBAR),
  157.     EXCMD(CMD_iabbrev,    "iabbrev",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  158.     EXCMD(CMD_iabclear, "iabclear",    TRLBAR),
  159.     EXCMD(CMD_if,    "if",        EXTRA+NOTRLCOM),
  160.     EXCMD(CMD_ijump,    "ijump",    BANG+RANGE+DFLALL+EXTRA),
  161.     EXCMD(CMD_ilist,    "ilist",    BANG+RANGE+DFLALL+EXTRA),
  162.     EXCMD(CMD_imap,    "imap",        EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  163.     EXCMD(CMD_imapclear,"imapclear",    TRLBAR),
  164.     EXCMD(CMD_imenu,    "imenu",    RANGE+NOTADR+ZEROR+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  165.     EXCMD(CMD_inoremap, "inoremap",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  166.     EXCMD(CMD_inoremenu,"inoremenu",    RANGE+NOTADR+ZEROR+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  167.     EXCMD(CMD_inoreabbrev,"inoreabbrev",EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  168.     EXCMD(CMD_intro,    "intro",    TRLBAR),
  169.     EXCMD(CMD_isearch,    "isearch",    BANG+RANGE+DFLALL+EXTRA),
  170.     EXCMD(CMD_isplit,    "isplit",    BANG+RANGE+DFLALL+EXTRA),
  171.     EXCMD(CMD_iunmap,    "iunmap",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  172.     EXCMD(CMD_iunmenu,    "iunmenu",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  173.     EXCMD(CMD_iunabbrev,"iunabbrev",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  174.     EXCMD(CMD_join,    "join",        BANG+RANGE+COUNT+TRLBAR),
  175.     EXCMD(CMD_jumps,    "jumps",    TRLBAR),
  176.     EXCMD(CMD_k,    "k",        RANGE+WORD1+TRLBAR),
  177.     EXCMD(CMD_list,    "list",        RANGE+COUNT+TRLBAR),
  178.     EXCMD(CMD_last,    "last",        EXTRA+BANG+EDITCMD+TRLBAR),
  179.     EXCMD(CMD_left,    "left",        TRLBAR+RANGE+EXTRA),
  180.     EXCMD(CMD_let,    "let",        EXTRA+NOTRLCOM),
  181.     EXCMD(CMD_ls,    "ls",        TRLBAR),
  182.     EXCMD(CMD_move,    "move",        RANGE+EXTRA+TRLBAR),
  183.     EXCMD(CMD_mark,    "mark",        RANGE+WORD1+TRLBAR),
  184.     EXCMD(CMD_marks,    "marks",    EXTRA+TRLBAR),
  185.     EXCMD(CMD_map,    "map",        BANG+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  186.     EXCMD(CMD_mapclear,    "mapclear",    BANG+TRLBAR),
  187.     EXCMD(CMD_make,    "make",        NEEDARG+EXTRA+TRLBAR+XFILE),
  188.     EXCMD(CMD_menu,    "menu",        RANGE+NOTADR+ZEROR+BANG+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  189.     EXCMD(CMD_mkexrc,    "mkexrc",    BANG+FILE1+TRLBAR),
  190.     EXCMD(CMD_mkvimrc,    "mkvimrc",    BANG+FILE1+TRLBAR),
  191.     EXCMD(CMD_mfstat,    "mfstat",    TRLBAR),    /* for debugging */
  192.     EXCMD(CMD_mode,    "mode",        WORD1+TRLBAR),
  193.     EXCMD(CMD_next,    "next",        RANGE+NOTADR+BANG+NAMEDFS+EDITCMD+TRLBAR),
  194.     EXCMD(CMD_new,    "new",        BANG+FILE1+RANGE+NOTADR+EDITCMD+TRLBAR),
  195.     EXCMD(CMD_nmap,    "nmap",        EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  196.     EXCMD(CMD_nmapclear,"nmapclear",    TRLBAR),
  197.     EXCMD(CMD_nmenu,    "nmenu",    RANGE+NOTADR+ZEROR+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  198.     EXCMD(CMD_nnoremap, "nnoremap",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  199.     EXCMD(CMD_nnoremenu,"nnoremenu",    RANGE+NOTADR+ZEROR+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  200.     EXCMD(CMD_number,    "number",    RANGE+COUNT+TRLBAR),
  201.     EXCMD(CMD_noremap,    "noremap",    BANG+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  202.     EXCMD(CMD_noremenu, "noremenu",    RANGE+NOTADR+ZEROR+BANG+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  203.     EXCMD(CMD_noreabbrev,"noreabbrev",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  204.     EXCMD(CMD_normal,    "normal",    RANGE+BANG+EXTRA+NEEDARG+NOTRLCOM+USECTRLV),
  205.     EXCMD(CMD_nunmap,    "nunmap",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  206.     EXCMD(CMD_nunmenu,    "nunmenu",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  207.     EXCMD(CMD_open,    "open",        TRLBAR),    /* not supported */
  208.     EXCMD(CMD_only,    "only",        BANG+TRLBAR),
  209.     EXCMD(CMD_omap,    "omap",        EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  210.     EXCMD(CMD_omapclear,"omapclear",    TRLBAR),
  211.     EXCMD(CMD_omenu,    "omenu",    RANGE+NOTADR+ZEROR+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  212.     EXCMD(CMD_onoremap, "onoremap",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  213.     EXCMD(CMD_onoremenu,"onoremenu",    RANGE+NOTADR+ZEROR+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  214.     EXCMD(CMD_ounmap,    "ounmap",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  215.     EXCMD(CMD_ounmenu,    "ounmenu",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  216.     EXCMD(CMD_print,    "print",    RANGE+COUNT+TRLBAR),
  217.     EXCMD(CMD_perl,    "perl",        RANGE|EXTRA|DFLALL|NEEDARG),
  218.     EXCMD(CMD_perldo,    "perldo",    RANGE|EXTRA|DFLALL|NEEDARG),
  219.     EXCMD(CMD_pop,    "pop",        RANGE+NOTADR+BANG+COUNT+TRLBAR+ZEROR),
  220.     EXCMD(CMD_put,    "put",        RANGE+BANG+REGSTR+TRLBAR+ZEROR),
  221.     EXCMD(CMD_preserve, "preserve",    TRLBAR),
  222.     EXCMD(CMD_previous, "previous",    EXTRA+RANGE+NOTADR+COUNT+BANG+EDITCMD+TRLBAR),
  223.     EXCMD(CMD_pwd,    "pwd",        TRLBAR),
  224.     EXCMD(CMD_python,    "python",    RANGE+EXTRA+NEEDARG),
  225.     EXCMD(CMD_pyfile,    "pyfile",    RANGE+FILE1+NEEDARG),
  226.     EXCMD(CMD_quit,    "quit",        BANG+TRLBAR),
  227.     EXCMD(CMD_qall,    "qall",        BANG+TRLBAR),
  228.     EXCMD(CMD_read,    "read",        BANG+RANGE+NAMEDF+TRLBAR+ZEROR),
  229.     EXCMD(CMD_rewind,    "rewind",    EXTRA+BANG+EDITCMD+TRLBAR),
  230.     EXCMD(CMD_recover,    "recover",    BANG+FILE1+TRLBAR),
  231.     EXCMD(CMD_redo,    "redo",        TRLBAR),
  232.     EXCMD(CMD_redir,    "redir",    BANG+FILES+TRLBAR),
  233.     EXCMD(CMD_registers,"registers",    EXTRA+NOTRLCOM+TRLBAR),
  234.     EXCMD(CMD_resize,    "resize",    TRLBAR+WORD1),
  235.     EXCMD(CMD_retab,    "retab",    TRLBAR+RANGE+DFLALL+BANG+WORD1),
  236.     EXCMD(CMD_right,    "right",    TRLBAR+RANGE+EXTRA),
  237.     EXCMD(CMD_rviminfo, "rviminfo",    BANG+FILE1+TRLBAR),
  238.     EXCMD(CMD_substitute,"substitute",    RANGE+EXTRA),
  239.     EXCMD(CMD_sargument,"sargument",    BANG+RANGE+NOTADR+COUNT+EXTRA+EDITCMD+TRLBAR),
  240.     EXCMD(CMD_sall,    "sall",        RANGE+NOTADR+COUNT+TRLBAR),
  241.     EXCMD(CMD_sbuffer,    "sbuffer",    BANG+RANGE+NOTADR+BUFNAME+COUNT+EXTRA+TRLBAR),
  242.     EXCMD(CMD_sball,    "sball",    RANGE+NOTADR+COUNT+TRLBAR),
  243.     EXCMD(CMD_sblast,    "sblast",    TRLBAR),
  244.     EXCMD(CMD_sbmodified,"sbmodified",    RANGE+NOTADR+COUNT+TRLBAR),
  245.     EXCMD(CMD_sbnext,    "sbnext",    RANGE+NOTADR+COUNT+TRLBAR),
  246.     EXCMD(CMD_sbNext,    "sbNext",    RANGE+NOTADR+COUNT+TRLBAR),
  247.     EXCMD(CMD_sbprevious,"sbprevious",    RANGE+NOTADR+COUNT+TRLBAR),
  248.     EXCMD(CMD_sbrewind, "sbrewind",    TRLBAR),
  249.     EXCMD(CMD_suspend,    "suspend",    TRLBAR+BANG),
  250.     EXCMD(CMD_set,    "set",        EXTRA+TRLBAR),
  251.     EXCMD(CMD_shell,    "shell",    TRLBAR),
  252.     EXCMD(CMD_sleep,    "sleep",    RANGE+COUNT+NOTADR+TRLBAR),
  253.     EXCMD(CMD_source,    "source",    BANG+NAMEDF+NEEDARG+TRLBAR),
  254.     EXCMD(CMD_split,    "split",    BANG+FILE1+RANGE+NOTADR+EDITCMD+TRLBAR),
  255.     EXCMD(CMD_snext,    "snext",    RANGE+NOTADR+BANG+NAMEDFS+EDITCMD+TRLBAR),
  256.     EXCMD(CMD_sniff,    "sniff",    EXTRA+TRLBAR),
  257.     EXCMD(CMD_sNext,    "sNext",    EXTRA+RANGE+NOTADR+COUNT+BANG+EDITCMD+TRLBAR),
  258.     EXCMD(CMD_sprevious,"sprevious",    EXTRA+RANGE+NOTADR+COUNT+BANG+EDITCMD+TRLBAR),
  259.     EXCMD(CMD_srewind,    "srewind",    EXTRA+BANG+EDITCMD+TRLBAR),
  260.     EXCMD(CMD_slast,    "slast",    EXTRA+BANG+EDITCMD+TRLBAR),
  261.     EXCMD(CMD_stop,    "stop",        TRLBAR+BANG),
  262.     EXCMD(CMD_stag,    "stag",        RANGE+NOTADR+BANG+WORD1+TRLBAR+ZEROR),
  263.     EXCMD(CMD_stjump,    "stjump",    BANG+TRLBAR+WORD1),
  264.     EXCMD(CMD_stselect,    "stselect",    BANG+TRLBAR+WORD1),
  265.     EXCMD(CMD_sunhide,    "sunhide",    RANGE+NOTADR+COUNT+TRLBAR),
  266.     EXCMD(CMD_sview,    "sview",    NEEDARG+RANGE+BANG+FILE1+EDITCMD+TRLBAR),
  267.     EXCMD(CMD_swapname, "swapname",    TRLBAR),
  268.     EXCMD(CMD_syntax,    "syntax",    EXTRA+NOTRLCOM),
  269.     EXCMD(CMD_t,    "t",        RANGE+EXTRA+TRLBAR),
  270.     EXCMD(CMD_tag,    "tag",        RANGE+NOTADR+BANG+WORD1+TRLBAR+ZEROR),
  271.     EXCMD(CMD_tags,    "tags",        TRLBAR),
  272.     EXCMD(CMD_tjump,    "tjump",    BANG+TRLBAR+WORD1),
  273.     EXCMD(CMD_tlast,    "tlast",    BANG+TRLBAR),
  274.     EXCMD(CMD_tnext,    "tnext",    RANGE+NOTADR+BANG+TRLBAR+ZEROR),
  275.     EXCMD(CMD_tNext,    "tNext",    RANGE+NOTADR+BANG+TRLBAR+ZEROR),
  276.     EXCMD(CMD_tprevious,"tprevious",    RANGE+NOTADR+BANG+TRLBAR+ZEROR),
  277.     EXCMD(CMD_trewind,    "trewind",    RANGE+NOTADR+BANG+TRLBAR+ZEROR),
  278.     EXCMD(CMD_tselect,    "tselect",    BANG+TRLBAR+WORD1),
  279.     EXCMD(CMD_undo,    "undo",        TRLBAR),
  280.     EXCMD(CMD_unabbreviate,"unabbreviate",EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  281.     EXCMD(CMD_unhide,    "unhide",    RANGE+NOTADR+COUNT+TRLBAR),
  282.     EXCMD(CMD_unlet,    "unlet",    NEEDARG+WORD1+TRLBAR),
  283.     EXCMD(CMD_unmap,    "unmap",    BANG+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  284.     EXCMD(CMD_unmenu,    "unmenu",    BANG+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  285.     EXCMD(CMD_update,    "update",    RANGE+BANG+FILE1+DFLALL+TRLBAR),
  286.     EXCMD(CMD_vglobal,    "vglobal",    RANGE+EXTRA+DFLALL),
  287.     EXCMD(CMD_version,    "version",    EXTRA+TRLBAR),
  288.     EXCMD(CMD_visual,    "visual",    RANGE+BANG+FILE1+EDITCMD+TRLBAR),
  289.     EXCMD(CMD_view,    "view",        RANGE+BANG+FILE1+EDITCMD+TRLBAR),
  290.     EXCMD(CMD_vmap,    "vmap",        EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  291.     EXCMD(CMD_vmapclear,"vmapclear",    TRLBAR),
  292.     EXCMD(CMD_vmenu,    "vmenu",    RANGE+NOTADR+ZEROR+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  293.     EXCMD(CMD_vnoremap, "vnoremap",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  294.     EXCMD(CMD_vnoremenu,"vnoremenu",    RANGE+NOTADR+ZEROR+EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  295.     EXCMD(CMD_vunmap,    "vunmap",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  296.     EXCMD(CMD_vunmenu,    "vunmenu",    EXTRA+TRLBAR+NOTRLCOM+USECTRLV),
  297.     EXCMD(CMD_write,    "write",    RANGE+BANG+FILE1+DFLALL+TRLBAR),
  298.     EXCMD(CMD_while,    "while",    EXTRA+NOTRLCOM),
  299.     EXCMD(CMD_wnext,    "wnext",    RANGE+NOTADR+BANG+FILE1+TRLBAR),
  300.     EXCMD(CMD_wNext,    "wNext",    RANGE+NOTADR+BANG+FILE1+TRLBAR),
  301.     EXCMD(CMD_wprevious,"wprevious",    RANGE+NOTADR+BANG+FILE1+TRLBAR),
  302.     EXCMD(CMD_winsize,    "winsize",    EXTRA+NEEDARG+TRLBAR),
  303.     EXCMD(CMD_wq,    "wq",        RANGE+BANG+FILE1+DFLALL+TRLBAR),
  304.     EXCMD(CMD_wall,    "wall",        BANG+TRLBAR),
  305.     EXCMD(CMD_wqall,    "wqall",    BANG+FILE1+DFLALL+TRLBAR),
  306.     EXCMD(CMD_wviminfo, "wviminfo",    BANG+FILE1+TRLBAR),
  307.     EXCMD(CMD_xit,    "xit",        RANGE+BANG+FILE1+DFLALL+TRLBAR),
  308.     EXCMD(CMD_xall,    "xall",        BANG+TRLBAR),
  309.     EXCMD(CMD_yank,    "yank",        RANGE+REGSTR+COUNT+TRLBAR),
  310.     EXCMD(CMD_z,    "z",        RANGE+EXTRA+TRLBAR),
  311.     EXCMD(CMD_Next,    "Next",        EXTRA+RANGE+NOTADR+COUNT+BANG+EDITCMD+TRLBAR),
  312.     EXCMD(CMD_at,    "@",        RANGE+EXTRA+TRLBAR),
  313.     EXCMD(CMD_pound,    "#",        RANGE+COUNT+TRLBAR),
  314.     EXCMD(CMD_bang,    "!",        RANGE+BANG+NAMEDFS),
  315.     EXCMD(CMD_lshift,    "<",        RANGE+COUNT+TRLBAR),
  316.     EXCMD(CMD_rshift,    ">",        RANGE+COUNT+TRLBAR),
  317.     EXCMD(CMD_equal,    "=",        RANGE+TRLBAR),
  318.     EXCMD(CMD_and,    "&",        RANGE+EXTRA),
  319.     EXCMD(CMD_tilde,    "~",        RANGE+EXTRA),
  320.  
  321. #ifndef DO_DECLARE_EXCMD
  322.     CMD_SIZE    /* MUST be the last one! */
  323. #endif
  324. };
  325.  
  326. #ifndef DO_DECLARE_EXCMD
  327. typedef enum CMD_index CMDIDX;
  328.  
  329. /*
  330.  * Arguments used for Ex commands.
  331.  */
  332. typedef struct exarg
  333. {
  334.     char_u    *arg;        /* argument of the command */
  335.     char_u    *nextcmd;   /* next command (NULL if none) */
  336.     char_u    *cmd;        /* the name of the command (except for :make) */
  337.     CMDIDX    cmdidx;        /* the index for the command */
  338.     int        skip;        /* don't execute the command, only parse it */
  339.     int        forceit;    /* TRUE if ! present */
  340.     int        addr_count; /* the number of addresses given */
  341.     linenr_t    line1;        /* the first line number */
  342.     linenr_t    line2;        /* the second line number or count */
  343.     char_u    *do_ecmd_cmd; /* +command argument to be used in edited file */
  344.     linenr_t    do_ecmd_lnum; /* the line number in an edited file */
  345.     int        append;        /* TRUE with ":w >>file" command */
  346.     int        usefilter;  /* TRUE with ":w !command" and ":r!command" */
  347.     int        amount;        /* number of '>' or '<' for shift command */
  348.     int        regname;    /* register name (NUL if none) */
  349. } EXARG;
  350. #endif
  351.